home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Development Tools & Languages / • Other Platforms / PCCTS 1.31 / testcpp / 10 / test.g < prev   
Encoding:
Text File  |  1995-03-10  |  2.0 KB  |  102 lines  |  [TEXT/MPS ]

  1. /* This tests a simple DLG-based scanner plus (...)? predicates */
  2.  
  3. <<
  4. class ANTLRToken : public ANTLRCommonToken {
  5.     virtual ANTLRLightweightToken *makeToken(TokenType tt, ANTLRChar *txt, int line)
  6.         {
  7.             ANTLRToken *t = new ANTLRToken;
  8.             t->setType(tt); t->setText(txt); t->setLine(line);
  9.             return t;
  10.         }
  11. };
  12.  
  13. /* We could have used ANTLRCommonBacktrackingToken here; i.e.,
  14. typedef ANTLRCommonBacktrackingToken ANTLRToken;
  15. */
  16.  
  17. #include "DLGLexer.h"
  18.  
  19. int main()
  20. {
  21.     DLGFileInput in(stdin);
  22.     DLGLexer scan(&in,2000);
  23.     ANTLRTokenBuffer pipe(&scan, 3, 30);
  24.     ANTLRToken aToken;
  25.     scan.setToken(&aToken);
  26.     Expr parser(&pipe);
  27.     parser.init();
  28.  
  29.     parser.begin();
  30.     return 0;
  31. }
  32.  
  33. void doit(Expr *p)
  34. {
  35.     printf("LT(1) is %s\n", ((ANTLRToken *)p->LT(1))->getText());
  36.     printf("LT(2) is %s\n", ((ANTLRToken *)p->LT(2))->getText());
  37.     printf("LT(3) is %s\n", ((ANTLRToken *)p->LT(3))->getText());
  38.     printf("LT(4) is %s\n", ((ANTLRToken *)p->LT(4))->getText());
  39.     printf("LT(5) is %s\n", ((ANTLRToken *)p->LT(5))->getText());
  40.     printf("LT(6) is %s\n", ((ANTLRToken *)p->LT(6))->getText());
  41.     printf("LT(7) is %s\n", ((ANTLRToken *)p->LT(7))->getText());
  42.     printf("LT(8) is %s\n", ((ANTLRToken *)p->LT(8))->getText());
  43.     printf("LT(9) is %s\n", ((ANTLRToken *)p->LT(9))->getText());
  44.     printf("LT(10) is %s\n", ((ANTLRToken *)p->LT(10))->getText());
  45.     printf("LT(11) is %s\n", ((ANTLRToken *)p->LT(11))->getText());
  46. }
  47. >>
  48.  
  49. #token "[\ \t\n]+"    <<skip();>>
  50. #token Eof "@"
  51.  
  52. class Expr {                /* Define a grammar class */
  53.  
  54. begin
  55.     :    <</*doit(this);*/>> 
  56.         e
  57.     ;
  58.  
  59. e    :    ( list "=" )?  list "=" list Eof
  60.         <<printf("list = list\n");>>
  61.     |    list Eof
  62.         <<printf("list\n");>>
  63.     ;
  64.  
  65. list:    "\(" (IDENTIFIER|NUMBER)* "\)"
  66.     ;
  67.  
  68. predict
  69.     :    ( "\(" (IDENTIFIER|NUMBER)* "\)" "=")?
  70.     |    "\(" "\)" "="
  71.     ;
  72.  
  73. /*
  74. #token INT "int"
  75. #token SEMI ";"
  76. #token STAR "\*"
  77. #token ASSIGN "="
  78.  
  79. begin:  "extern" "char" declarator ";"
  80.     ;
  81.  
  82. e    :    (decl)?
  83.     |    expr
  84.     ;
  85.  
  86. expr:    IDENTIFIER "=" NUMBER
  87.     ;
  88.  
  89. decl:    "int" declarator ";"
  90.     ;
  91.  
  92. declarator
  93.     :    ( "\*" )? "\*" declarator
  94.     |    IDENTIFIER
  95.     ;
  96. */
  97.  
  98. }
  99.  
  100. #token IDENTIFIER    "[a-z]+"
  101. #token NUMBER        "[0-9]+"
  102.